package com.dongjiantong.farmrecords.service;

import com.dongjiantong.common.web.sso.LoginInfo;
import com.dongjiantong.farmrecords.dto.FarmRecordsImmunizationDto;
import com.dongjiantong.farmrecords.model.FarmRecordsImmunization;
import com.dongjiantong.mybatis.BaseService;
import com.github.pagehelper.PageInfo;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface FarmRecordsImmunizationService extends BaseService<FarmRecordsImmunization> {

    /**
     * 根据条件进行分页查询 (无条件表示查询全部)(包含对应免疫子表中的数据)
     * @param pageNum
     * @param pageSize
     * @param map   查询条件
     * @return  Response<PageInfo<FarmRecordsInspection>>
     */
    PageInfo<FarmRecordsImmunization> selectByMap(Integer pageNum, Integer pageSize, Map map);

    /**
     * 新建一条记录
     * @param farmRecordsImmunizationDto
     * @param toStatus
     * @return  long 返回插入数据的id
     */
    Map<String, Object> createOne(LoginInfo loginInfo, FarmRecordsImmunizationDto farmRecordsImmunizationDto, Integer toStatus);

    /**
     * 正常更新
     * 更新一条记录 (根据id或者number)
     * @param farmRecordsInspectionDto
     * @param toStatus
     * @return  boolean (更新成功返回true 反之返回false)
     */
    Integer updateByIdOrNumber(LoginInfo loginInfo,FarmRecordsImmunizationDto farmRecordsInspectionDto,Integer toStatus);

    /**
     * 更新牛档案免疫
     * @param loginInfo
     * @param farmRecordsImmunizationDto
     * @param toStatus
     * @return
     */
    Map<String,Object> updateCowByIdOrNumber(LoginInfo loginInfo,FarmRecordsImmunizationDto farmRecordsImmunizationDto,Integer toStatus);

    /**
     * 只更新耳标号
     * 更新免疫主体表信息
     * @param farmRecordsImmunization
     * @return
     */
    /*Integer updateEarNumber(FarmRecordsImmunization farmRecordsImmunization);*/

    /**
     * 根据免疫主表 主键id查询对应免疫记录
     * @param id
     * @return Response<FarmRecordsImmunization>
     */
    FarmRecordsImmunizationDto selectById(Long id);

    /**
     * 查询牛的免疫记录
     * @param pageNum
     * @param pageSize
     * @param map
     * @return
     */
    PageInfo<FarmRecordsImmunization> selectBullByMap(Integer pageNum, Integer pageSize, Map map);

    /**
     * 养殖端
     * 根据提交状态分页查询列表
     * @param status
     * @param farmId
     * @return
     */
    PageInfo<FarmRecordsImmunization> selectListByStatus(Integer pageNum, Integer pageSize, Integer status, Long farmId, Integer nonBull);

    /**
     * 更新耳标(耳标状态,耳标使用记录)
     * @param farmRecordsImmunization
     * @param original_ear_list
     * @return
     */
    Boolean updateEarNumber(LoginInfo loginInfo,FarmRecordsImmunization farmRecordsImmunization, List<String> original_ear_list);

    /**
     * app政府端查询
     * @param pageNum
     * @param pageSize
     * @param map
     * @return
     */
    PageInfo<FarmRecordsImmunization> selectByMapApp(Integer pageNum, Integer pageSize, Map map);

    FarmRecordsImmunization selectByIdWeb(Long id);

    /**
     * 根据关联牛档案 id 查询对应免疫记录
     * @param cowRecordId
     * @return
     */
    FarmRecordsImmunization selectBullImmunization(Long cowRecordId);

    /**
     * 根据关联牛档案Ids 查询对应的免疫次数
     * @param ids
     * @return
     */
    List<Map<String, Object>> selectImmunizationCount(List<Long> ids);

    /**
     * 新增牛档案免疫记录
     * @param loginInfo
     * @param farmRecordsImmunizationDto
     * @param toStatus
     * @return
     */
    Map<String,Object> createCowOne(LoginInfo loginInfo, FarmRecordsImmunizationDto farmRecordsImmunizationDto, Integer toStatus);

    /**
     * 根据养殖场ID和时间区间查询免疫次数
     * @param farmId
     * @param startDate
     * @param endDate
     * @return
     */
    Integer selectCountByFarmId(Long farmId, Date startDate, Date endDate);

    /**
     * 牛档案更新耳标对应的免疫记录耳标需要更新
     */
    Integer updateEarNumberByCowRelateId(Long cowRelateId,String ear_tag_number);
}
